#include "ListEnsCapa.h"

using namespace std;

/**
 * Constructeur standard, qui initialise une instance qui ne possède
 * aucune restrictions quant aux modifications que l'on peut apporter
 * à la sélections des capacités raciales.
 *
 * @param nom nom de l'ensemble.
 * @param prix coût de l'ensemble.
 * @param membres liste des capacités incluses dans l'ensemble.
 */
ListEnsCapa::ListEnsCapa(const string& nom, const unsigned int& prix,
			 const vector< unsigned int >& membres)
  : ListCapa( nom, prix )
{
  Membres.assign( membres.begin(), membres.end() );
}

/**
 * Constructeur permettant de limiter (partiellement ou totalement)
 * les modifications postérieures à la sélection de l'ensemble de
 * capacités.
 *
 * @param nom nom de l'ensemble.
 * @param prix coût de l'ensemble.
 * @param membres liste des capacités incluses dans l'ensemble.
 * @param exclus liste des capacités dont l'état n'est plus modifiable
 * une fois la sélection effectuée.
 */
ListEnsCapa::ListEnsCapa(const string& nom, const unsigned int& prix,
			 const vector< unsigned int >& membres,
			 const vector< unsigned int >& exclus)
  : ListCapa( nom, prix )
{
  Membres.assign( membres.begin(), membres.end() );
  Exclus.assign( exclus.begin(), exclus.end() );
}

/**
 * Constructeur de copie, permet de dupliquer une instance.
 *
 * @param lsEnsCapa instance à copier.
 */
ListEnsCapa::ListEnsCapa(const ListEnsCapa& lsEnsCapa)
  : ListCapa( lsEnsCapa )
{
  Membres.assign( lsEnsCapa.Membres.begin(), lsEnsCapa.Membres.end() );
  Exclus.assign( lsEnsCapa.Exclus.begin(), lsEnsCapa.Exclus.end() ); 
}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
ListEnsCapa::~ListEnsCapa()
{}

/**
 * Opérateur d'affectation, permet de copier une instance dans une
 * autre.
 *
 * @param lsEnsCapa instance à copier.
 * @return une référence constance sur l'instance courante.
 */
const ListEnsCapa& ListEnsCapa::operator=(const ListEnsCapa& lsEnsCapa)
{
  Capa = lsEnsCapa.Capa;
  Cout = lsEnsCapa.Cout;
  Membres.assign( lsEnsCapa.Membres.begin(), lsEnsCapa.Membres.end() );
  Exclus.assign( lsEnsCapa.Exclus.begin(), lsEnsCapa.Exclus.end() );

  return *this;
}

/**
 * Permet de récupérer un pointeur sur la liste des capacités
 * incluses.
 *
 * @return un pointeur sur Membres.
 */
const vector< unsigned int >* ListEnsCapa::membres() const
{
  return &Membres;
}

/**
 * Permet de récupérer un pointeur sur la liste des capacités
 * "gelées".
 *
 * @return un pointeur sur Exclus.
 */
const vector< unsigned int >* ListEnsCapa::exclus() const
{
  return &Membres;
}
